/*
 * @Descripttion:
 * @version:
 * @Author: ChenXiang
 * @Date: 2021-05-26 09:03:55
 * @LastEditors: ChenXiang
 * @LastEditTime: 2021-05-26 09:14:02
 */

/**
 * 将文件名处理成动态路由格式
 * 文件命名的时候只能用驼峰，下滑线是专门用来给动态路由用的
 * @msg:
 * @param key 文件名
 * @return str 过滤后的参数 例如/detail_id
 * @example account.detail_id.tsx=>account/detail/:id
 */

const handleParams = (key: string, str: string) => {
  const params = key.split("_");
  if (params.length === 2) {
    // 只有一个动态参数的情况下
    const p1 = params[1].slice(0, params[1].indexOf("."));
    str = str.slice(0, str.indexOf("_")) + "/:" + p1;
  } else {
    // 多个动态参数的情况下
    console.warn("目前不支持多个参数");
  }
  return str;
};

const filnameHandle = (key: string) => {
  const _keyarr = key.split(".");

  if (_keyarr[1] === "/view") {
    return "/" + _keyarr[2];
  }

  // if (_keyarr[2] === 'index') { // 为index说明路由名称为模块名，base.index=> /base
  //     return _keyarr[1];
  // };

  // 说明是子路由
  if (key.includes(">")) {
    let str = "/" + _keyarr[2].replace(/>/g, "/");
    if (key.includes("_")) {
      str = handleParams(key, str);
    }
    return str;
  }

  // 说明是个动态路由
  if (key.includes("_")) {
    return handleParams(key, "/" + _keyarr[2]);
  }

  return "/" + _keyarr[2];
};

/**
 *
 * @param files 通过require.context获得
 * @return Array 数据能被react-route直接循环使用
 */
export default function autoCreateRoutes(files: any) {
  return files.keys().reduce((init: any[], key: string) => {
    init.push({
      path: filnameHandle(key),
      component: files(key).default
    });
    return init;
  }, []);
}
